package com.sky;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * @EnableCaching 开启缓存注解功能，通常加在启动类上
 * @Cacheable   在方法执行前先查询缓存中是否有数据，如果有数据，则直接返回缓存数据；如果没有缓存数据，调用方法并将方法返回值放到缓存中
 * @CachePut   将方法的返回值放到缓存中
 * @CacheEvict   将一条或多条数据从缓存中删除
 *
 * 实现思路,实现步骤：
 *1). 导入Spring Cache和Redis相关maven坐标
 *2). 在启动类上加入@EnableCaching注解，开启缓存注解功能
 *3). 在用户端接口SetmealController的 list 方法上加入@Cacheable注解
 *4). 在管理端接口SetmealController的 save、delete、update、startOrStop等方法上加入CacheEvict注解
 *
 * Spring Cache 是一个框架，实现了基于注解的缓存功能，只需要简单地加一个注解，就能实现缓存功能。
 * Spring Cache 提供了一层抽象，底层可以切换不同的缓存实现，例如：
 * - EHCache
 * - Caffeine
 * - Redis(常用)
 */

@EnableCaching     //开启缓存注解功能
@SpringBootApplication
@EnableTransactionManagement //开启注解方式的事务管理
@Slf4j
public class SkyApplication {
    public static void main(String[] args) {
        SpringApplication.run(SkyApplication.class, args);
        log.info("server started");
    }
}
